//*********************************************************
//
//    Copyright (c) Microsoft. All rights reserved.
//    This code is licensed under the Apache License, Version 2.0.
//    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
//    ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
//    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
//    PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//********************************************************* 

namespace Microsoft.TridentWordAddIn.Common
{
    /// <summary>
    /// This represents the abstraction of a Scientific Package and is the one that is implemented
    /// by the concrete scientific implementation(Gene Pattern package, Physics package etc)
    /// It requires the concrete implementations to supply the following 3 interfaces
    /// <list type="bullet">
    /// <item><see cref="IPackageHost"/>IPackageHost</item>
    /// <item><see cref="ITaskManager"/>ITaskManager</item>
    /// <item><see cref="IDocumentStorage"/>IDocumentStorage</item>
    /// </list>
    /// </summary>
    public interface ITridentPackage
    {
        /// <summary>
        /// Gets a ribbon extension from the package.
        /// </summary>
        /// <returns>an object that should be of type Office.IRibbonExtensibility</returns>
        object GetRibbon();

        /// <summary>
        /// Sets the package host.
        /// </summary>
        /// <param name="packageHost">The package host.</param>
        void SetPackageHost(IThisAddInPackageHost packageHost);

        /// <summary>
        /// Sets the document storage.
        /// </summary>
        /// <param name="documentStorage">The document storage.</param>
        void SetDocumentStorage(IDocumentStorage documentStorage);

        /// <summary>
        /// Sets the task pane manager for this package. This controls 
        /// all the task panes associated with the package
        /// </summary>
        /// <param name="taskPaneManager">The task pane manager.</param>
        void SetTaskPaneManager(ITaskPaneManager taskPaneManager);
    }
}
